home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / assembler / progasm1.lha / SORGENTI3 / LEZIONE7z.s < prev    next >
Text File  |  1994-11-28  |  14KB  |  442 lines

  1.  
  2. ; Lezione7z.s    ANIMAZIONE (6 FOTOGRAMMI) DI UNO SPRITE ATTACCHED
  3.  
  4.  
  5.     SECTION    CiriCop,CODE
  6.  
  7. Inizio:
  8.     move.l    4.w,a6        ; Execbase
  9.     jsr    -$78(a6)    ; Disable
  10.     lea    GfxName(PC),a1    ; Nome lib
  11.     jsr    -$198(a6)    ; OpenLibrary
  12.     move.l    d0,GfxBase
  13.     move.l    d0,a6
  14.     move.l    $26(a6),OldCop    ; salviamo la vecchia COP
  15.  
  16. ;    Puntiamo la PIC "vuota"
  17.  
  18.     MOVE.L    #BITPLANE,d0    ; dove puntare
  19.     LEA    BPLPOINTERS,A1    ; puntatori COP
  20.     move.w    d0,6(a1)
  21.     swap    d0
  22.     move.w    d0,2(a1)
  23.  
  24. ;    Puntiamo gli sprite 0 ed 1, che ATTACCATI formeranno un solo sprite
  25. ;    a 16 colori. Lo sprite1, quello dispari, deve avere il bit 7 della
  26. ;    seconda word ad 1.
  27.  
  28.     MOVE.L    FRAMETAB(PC),d0        ; indirizzo dello sprite in d0
  29.     LEA    SpritePointers,a1    ; Puntatori in copperlist
  30.     move.w    d0,6(a1)
  31.     swap    d0
  32.     move.w    d0,2(a1)
  33.     swap    d0
  34.     ADD.L    #$44,d0        ; lo sprite dispari e' 44 bytes dopo!
  35.     addq.w    #8,a1            ; prossimi SPRITEPOINTERS
  36.     move.w    d0,6(a1)
  37.     swap    d0
  38.     move.w    d0,2(a1)
  39.  
  40. ; P.S: non occore settare il bit 7, e' gia' settato nello sprite in questo caso
  41.  
  42.     move.l    #COPPERLIST,$dff080    ; nostra COP
  43.     move.w    d0,$dff088        ; START COP
  44.     move.w    #0,$dff1fc        ; NO AGA!
  45.     move.w    #$c00,$dff106        ; NO AGA!
  46.  
  47. mouse:
  48.     cmpi.b    #$ff,$dff006    ; Linea 255?
  49.     bne.s    mouse
  50.  
  51.     bsr.s    Animazione
  52.     bsr.w    MuoviSprites    ; Muovi gli sprites
  53.  
  54. Aspetta:
  55.     cmpi.b    #$ff,$dff006    ; linea 255?
  56.     beq.s    Aspetta
  57.  
  58.     btst    #6,$bfe001    ; mouse premuto?
  59.     bne.s    mouse
  60.  
  61.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  62.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  63.  
  64.     move.l    4.w,a6
  65.     jsr    -$7e(a6)    ; Enable
  66.     move.l    gfxbase(PC),a1
  67.     jsr    -$19e(a6)    ; Closelibrary
  68.     rts
  69.  
  70. ;    Dati
  71.  
  72. GfxName:
  73.     dc.b    "graphics.library",0,0
  74.  
  75. GfxBase:
  76.     dc.l    0
  77.  
  78. OldCop:
  79.     dc.l    0
  80.  
  81. ; Questa routine anima gli sprite, spostando gli indirizzi dei fotogrammi
  82. ; in maniera che ogni volta il primo della tabella vada all'ultimo posto,
  83. ; mentra gli altri scorrono tutti di un posto in direzione del primo
  84.  
  85. Animazione:
  86.     addq.b    #1,ContaAnim    ; queste tre istruzioni fanno si' che il
  87.     cmp.b    #2,ContaAnim    ; fotogramma venga cambiato una volta
  88.     bne.s    NonCambiare     ; si e una no.
  89.     clr.b    ContaAnim
  90.     LEA    FRAMETAB(PC),a0 ; tabella dei fotogrammi
  91.     MOVE.L    (a0),d0        ; salva il primo indirizzo in d0
  92.     MOVE.L    4(a0),(a0)    ; sposta indietro gli altri 5 indirizzi
  93.     MOVE.L    4*2(a0),4(a0)    ; Queste istruzioni "ruotano" gli indirizzi
  94.     MOVE.L    4*3(a0),4*2(a0) ; della tabella.
  95.     MOVE.L    4*4(a0),4*3(a0)
  96.     MOVE.L    4*5(a0),4*4(a0)
  97.     MOVE.L    d0,4*5(a0)    ; metti l'ex primo indirizzo al sesto posto
  98.  
  99.     MOVE.L    FRAMETAB(PC),d0        ; indirizzo dello sprite in d0
  100.     LEA    SpritePointers,a1    ; Puntatore sprite pari
  101.     move.w    d0,6(a1)
  102.     swap    d0
  103.     move.w    d0,2(a1)
  104.     swap    d0
  105.     ADD.L    #$44,d0        ; lo sprite dispari e' 44 bytes dopo il pari
  106.     addq.w    #8,a1        ; POINTER dello sprite dispari
  107.     move.w    d0,6(a1)
  108.     swap    d0
  109.     move.w    d0,2(a1)
  110. NonCambiare:
  111.     rts
  112.  
  113. ContaAnim:
  114.     dc.w    0
  115.  
  116. ; Questa e` la tabella degli indirizzi dei fotogrammi dello sprite pari, da
  117. ; cui si accede anche ai rispettivi sprite dispari da attaccare. Gli indirizzi
  118. ; presenti nella tabella vengono "ruotati" all'interno della tabella dalla
  119. ; routine Animazione, in modo che il primo nella lista sia la prima volta il
  120. ; fotogramma1, la volta dopo il Fotogramma2, poi il 3,4,5,6 e di nuovo il
  121. ; primo, ciclicamente. In questo modo basta prendere l'indirizzo che sta
  122. ; all'inizio della tabella ogni volta dopo il "rimescolamento" per avere gli
  123. ; indirizzi dei fotogrammi in sequenza.
  124.  
  125. FRAMETAB:
  126.     DC.L    Fotogramma1
  127.     DC.L    Fotogramma2
  128.     DC.L    Fotogramma3
  129.     DC.L    Fotogramma4
  130.     DC.L    Fotogramma5
  131.     DC.L    Fotogramma6
  132.  
  133.  
  134. ; Questa routine legge dalle 2 tabelle le coordinate reali degli sprite.
  135. ; poiche` gli sprites sono attached hanno entrambi le stesse coordiante.
  136.  
  137. MuoviSprites:
  138.     ADDQ.L    #1,TABYPOINT     ; Fai puntare al byte successivo
  139.     MOVE.L    TABYPOINT(PC),A0 ; indirizzo contenuto in long TABXPOINT
  140.                  ; copiato in a0
  141.     CMP.L    #FINETABY-1,A0  ; Siamo all'ultimo byte della TAB?
  142.     BNE.S    NOBSTARTY    ; non ancora? allora continua
  143.     MOVE.L    #TABY-1,TABYPOINT ; Riparti a puntare dal primo byte
  144. NOBSTARTY:
  145.     moveq    #0,d3        ; Pulisci d3
  146.     MOVE.b    (A0),d3        ; copia il byte della tabella, cioe` la
  147.                 ; coordinata Y in d3
  148.  
  149.     ADDQ.L    #2,TABXPOINT     ; Fai puntare alla word successiva
  150.     MOVE.L    TABXPOINT(PC),A0 ; indirizzo contenuto in long TABXPOINT
  151.                  ; copiato in a0
  152.     CMP.L    #FINETABX-2,A0  ; Siamo all'ultima word della TAB?
  153.     BNE.S    NOBSTARTX    ; non ancora? allora continua
  154.     MOVE.L    #TABX-2,TABXPOINT ; Riparti a puntare dalla prima word-2
  155. NOBSTARTX:
  156.     moveq    #0,d4        ; azzeriamo d4
  157.     MOVE.w    (A0),d4        ; poniamo il valore della tabella, cioe`
  158.                 ; la coordinata X in d4
  159.  
  160.         MOVE    D3,D0           ; coordinata Y in d0
  161.         MOVE    D4,D1           ; coordinata X in d1
  162.     moveq    #15,d2        ; altezza dello sprite in d2
  163.     MOVE.L    FRAMETAB(PC),a1    ; indirizzo dello sprite in A1
  164.  
  165.     bsr.w    UniMuoviSprite  ; esegue la routine universale che posiziona
  166.                     ; lo sprite pari
  167.  
  168.     MOVE.W    D3,D0        ; coordinata Y in d0
  169.     MOVE.W    D4,D1        ; coordinata X in d1
  170.     moveq    #15,d2        ; altezza dello sprite in d2
  171.     LEA    $44(a1),a1    ; indirizzo dello sprite dispari in A1
  172.                 ; lo sprite dispari e` $44 bytes dopo quello
  173.                 ; pari
  174.     bsr.w    UniMuoviSprite  ; esegue la routine universale che posiziona
  175.                     ; lo sprite dispari
  176.     rts
  177.  
  178.  
  179. TABYPOINT:
  180.     dc.l    TABY-1        ; NOTA: i valori della tabella qua sono bytes,
  181.                 ; dunque lavoriamo con un ADDQ.L #1,TABYPOINT
  182.                 ; e non #2 come per quando sono word o con #4
  183.                 ; come quando sono longword.
  184. TABXPOINT:
  185.     dc.l    TABX-2        ; NOTA: i valori della tabella qua sono word,
  186.  
  187. ; Tabella con coordinate Y dello sprite precalcolate.
  188.  
  189. TABY:
  190.     incbin    "ycoordinatok.tab"    ; 200 valori .B
  191. FINETABY:
  192.  
  193. ; Tabella con coordinate X dello sprite precalcolate.
  194.  
  195. TABX:
  196.     incbin    "xcoordinatok.tab"    ; 150 valori .W
  197. FINETABX:
  198.  
  199.  
  200.  
  201. ; Routine universale di posizionamento degli sprite.
  202.  
  203. ;
  204. ;    Parametri in entrata di UniMuoviSprite:
  205. ;
  206. ;    a1 = Indirizzo dello sprite
  207. ;    d0 = posizione verticale Y dello sprite sullo schermo (0-255)
  208. ;    d1 = posizione orizzontale X dello sprite sullo schermo (0-320)
  209. ;    d2 = altezza dello sprite
  210. ;
  211.  
  212. UniMuoviSprite:
  213. ; posizionamento verticale
  214.     ADD.W    #$2c,d0        ; aggiungi l'offset dell'inizio dello schermo
  215.  
  216. ; a1 contiene l'indirizzo dello sprite
  217.     MOVE.b    d0,(a1)        ; copia il byte in VSTART
  218.     btst.l    #8,d0
  219.     beq.s    NonVSTARTSET
  220.     bset.b    #2,3(a1)    ; Setta il bit 8 di VSTART (numero > $FF)
  221.     bra.s    ToVSTOP
  222. NonVSTARTSET:
  223.     bclr.b    #2,3(a1)    ; Azzera il bit 8 di VSTART (numero < $FF)
  224. ToVSTOP:
  225.     ADD.w    D2,D0        ; Aggiungi l'altezza dello sprite per
  226.                 ; determinare la posizione finale (VSTOP)
  227.     move.b    d0,2(a1)    ; Muovi il valore giusto in VSTOP
  228.     btst.l    #8,d0
  229.     beq.s    NonVSTOPSET
  230.     bset.b    #1,3(a1)    ; Setta il bit 8 di VSTOP (numero > $FF)
  231.     bra.w    VstopFIN
  232. NonVSTOPSET:
  233.     bclr.b    #1,3(a1)    ; Azzera il bit 8 di VSTOP (numero < $FF)
  234. VstopFIN:
  235.  
  236. ; posizionamento orizzontale
  237.     add.w    #128,D1        ; 128 - per centrare lo sprite.
  238.     btst    #0,D1        ; bit basso della coordinata X azzerato?
  239.     beq.s    BitBassoZERO
  240.     bset    #0,3(a1)    ; Settiamo il bit basso di HSTART
  241.     bra.s    PlaceCoords
  242.  
  243. BitBassoZERO:
  244.     bclr    #0,3(a1)    ; Azzeriamo il bit basso di HSTART
  245. PlaceCoords:
  246.     lsr.w    #1,D1        ; SHIFTIAMO, ossia spostiamo di 1 bit a destra
  247.                 ; il valore di HSTART, per "trasformarlo" nel
  248.                 ; valore fa porre nel byte HSTART, senza cioe'
  249.                 ; il bit basso.
  250.     move.b    D1,1(a1)    ; Poniamo il valore XX nel byte HSTART
  251.     rts
  252.  
  253.  
  254.  
  255.     SECTION    GRAPHIC,DATA_C
  256.  
  257. COPPERLIST:
  258. SpritePointers:
  259.     dc.w    $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
  260.     dc.w    $12a,0,$12c,0,$12e,0,$130,0,$132,0
  261.     dc.w    $134,0,$136,0,$138,0,$13a,0,$13c,0
  262.     dc.w    $13e,0
  263.  
  264.     dc.w    $8E,$2c81    ; DiwStrt
  265.     dc.w    $90,$2cc1    ; DiwStop
  266.     dc.w    $92,$38        ; DdfStart
  267.     dc.w    $94,$d0        ; DdfStop
  268.     dc.w    $102,0        ; BplCon1
  269.     dc.w    $104,0        ; BplCon2
  270.     dc.w    $108,0        ; Bpl1Mod
  271.     dc.w    $10a,0        ; Bpl2Mod
  272.  
  273.             ; 5432109876543210
  274.     dc.w    $100,%0001001000000000    ; bit 12 acceso!! 1 bitplane lowres
  275.  
  276. BPLPOINTERS:
  277.     dc.w $e0,0,$e2,0    ;primo     bitplane
  278.  
  279. ;    Palette della PIC
  280.  
  281.     dc.w    $180,$000    ; color0    ; sfondo nero
  282.     dc.w    $182,$123    ; color1    ; colore 1 del bitplane, che
  283.                         ; in questo caso e' vuoto,
  284.                         ; per cui non compare.
  285.  
  286. ;    Palette degli SPRITE attacched
  287.  
  288.     dc.w    $1A2,$FFC    ; color17, COL 1 per sprite att.
  289.     dc.w    $1A4,$DEA    ; color18, COL 2 per sprite att.
  290.     dc.w    $1A6,$AC7    ; color19, COL 3 per sprite att.
  291.     dc.w    $1A8,$7B6    ; color20, COL 4 per sprite att.
  292.     dc.w    $1AA,$494    ; color21, COL 5 per sprite att.
  293.     dc.w    $1AC,$284    ; color22, COL 6 per sprite att.
  294.     dc.w    $1AE,$164    ; color23, COL 7 per sprite att.
  295.     dc.w    $1B0,$044    ; color24, COL 7 per sprite att.
  296.     dc.w    $1B2,$023    ; color25, COL 9 per sprite att.
  297.     dc.w    $1B4,$001    ; color26, COL 10 per sprite att.
  298.     dc.w    $1B6,$F80    ; color27, COL 11 per sprite att.
  299.     dc.w    $1B8,$C40    ; color28, COL 12 per sprite att.
  300.     dc.w    $1BA,$820    ; color29, COL 13 per sprite att.
  301.     dc.w    $1BC,$500    ; color30, COL 14 per sprite att.
  302.     dc.w    $1BE,$200    ; color31, COL 15 per sprite att.
  303.  
  304.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  305.  
  306.  
  307. ; ************ Ecco gli sprite: OVVIAMENTE in CHIP RAM! **********
  308.  
  309.  
  310. Fotogramma1:        ; lunghezza 15 linee, $44 bytes
  311.     dc.w $0000,$0000
  312.     dc.w $0580,$0040,$07c0,$0430,$0d68,$0d18,$1fac,$1b9c
  313.     dc.w $3428,$3818,$068e,$993c,$d554,$1390,$729e,$b6d8
  314.     dc.w $5556,$9390,$96b0,$e972,$406c,$7c60,$5bc4,$5fc8
  315.     dc.w $0970,$0908,$0bc0,$0030,$0600,$01c0
  316.     dc.w 0,0
  317. Fotogramma1b:        ; lunghezza 15 linee
  318.     dc.w $0000,$0080
  319.     dc.w $07c0,$0000,$1bf0,$0380,$32f8,$0380,$607c,$0380
  320.     dc.w $43f8,$0384,$e3fc,$0382,$efec,$7ffe,$cfe4,$7ffe
  321.     dc.w $efec,$7ffe,$fff0,$038e,$7fe0,$039c,$5c40,$23bc
  322.     dc.w $0a80,$37f8,$0380,$1ff0,$0000,$07c0
  323.     dc.w 0,0
  324.  
  325. Fotogramma2:
  326.     dc.w $0000,$0000
  327.     dc.w $0580,$0040,$05c0,$0430,$0ee8,$0e98,$1dac,$1b9c
  328.     dc.w $34e8,$3ad8,$560e,$993c,$f5e8,$3318,$d252,$1690
  329.     dc.w $3a96,$c7d0,$95b8,$ea32,$41ec,$78e0,$5e44,$5e48
  330.     dc.w $0470,$0408,$0ec0,$0030,$0600,$01c0
  331.     dc.w 0,0
  332. Fotogramma2b:
  333.     dc.w $0000,$0080
  334.     dc.w $07c0,$0000,$1bf0,$0180,$3178,$01c0,$607c,$01c0
  335.     dc.w $4138,$01c4,$e3fc,$7382,$cff8,$7f86,$efe0,$fffe
  336.     dc.w $ffec,$0ffe,$ffc8,$07fe,$7ff8,$071c,$5940,$27bc
  337.     dc.w $0a00,$3ff8,$0e00,$1ff0,$0000,$07c0
  338.     dc.w 0,0
  339.  
  340. Fotogramma3:
  341.     dc.w $0000,$0000
  342.     dc.w $0580,$0040,$04c0,$0430,$0e68,$0e18,$3dfc,$1bec
  343.     dc.w $25c8,$0bd8,$7b2e,$ba3c,$d068,$1798,$6642,$82b0
  344.     dc.w $32d6,$c690,$9490,$eb12,$49bc,$78b0,$4d6c,$4d60
  345.     dc.w $1870,$0808,$0ec0,$0030,$0600,$01c0
  346.     dc.w 0,0
  347. Fotogramma3b:
  348.     dc.w $0000,$0080
  349.     dc.w $07c0,$0000,$1bf0,$0000,$31f8,$0060,$601c,$20f0
  350.     dc.w $7038,$30e4,$c5dc,$7de2,$eff8,$3fc6,$fff0,$0fce
  351.     dc.w $fff0,$07ee,$ffe8,$07fe,$77c8,$0f7c,$5358,$3ebc
  352.     dc.w $1400,$3ff8,$0c00,$1ff0,$0000,$07c0
  353.     dc.w 0,0
  354.  
  355. Fotogramma4:
  356.     dc.w $0000,$0000
  357.     dc.w $0580,$0040,$04c0,$0430,$1678,$0608,$357c,$1764
  358.     dc.w $0968,$0968,$122e,$91bc,$c7e8,$0398,$6242,$86b0
  359.     dc.w $3256,$c790,$93b0,$f032,$786c,$5b60,$7354,$4748
  360.     dc.w $1870,$0808,$0ac0,$0030,$0600,$01c0
  361.     dc.w 0,0
  362. Fotogramma4b:
  363.     dc.w $0000,$0080
  364.     dc.w $07c0,$0000,$1bf0,$0000,$39f8,$1830,$689c,$3c78
  365.     dc.w $7698,$3ef4,$efdc,$1fe2,$fff8,$0fc6,$fff0,$07ce
  366.     dc.w $fff0,$0fee,$efc0,$1ffe,$6798,$3cfc,$7f30,$38fc
  367.     dc.w $1820,$37f8,$0000,$1ff0,$0000,$07c0
  368.     dc.w 0,0
  369.  
  370. Fotogramma5:
  371.     dc.w $0000,$0000
  372.     dc.w $0580,$0040,$04c0,$0030,$0e68,$0218,$172c,$1714
  373.     dc.w $3ca8,$3ca0,$0116,$9810,$cf10,$09d0,$64e2,$8290
  374.     dc.w $30d6,$d7b0,$8a50,$c992,$782c,$5b20,$7be4,$4fe8
  375.     dc.w $0830,$0808,$0ae0,$0010,$0600,$01c0
  376.     dc.w 0,0
  377. Fotogramma5b:
  378.     dc.w $0000,$0080
  379.     dc.w $07c0,$0000,$1ff0,$0400,$3df8,$0c00,$68fc,$0e08
  380.     dc.w $4358,$0f3c,$e7ec,$077e,$f7e8,$07fe,$fff0,$07ee
  381.     dc.w $eff0,$1fce,$f7f0,$3fee,$67c0,$3cfc,$7f10,$30fc
  382.     dc.w $0870,$37f8,$0060,$1ff0,$0000,$07c0
  383.     dc.w 0,0
  384.  
  385. Fotogramma6:
  386.     dc.w $0000,$0000
  387.     dc.w $0580,$0040,$07c0,$0430,$0e68,$0a18,$1b2c,$1b1c
  388.     dc.w $3428,$3c18,$0696,$9910,$cf5c,$0d98,$7492,$92d0
  389.     dc.w $50b6,$97d0,$ab70,$c8b2,$602c,$5e20,$5bc4,$5fc8
  390.     dc.w $0850,$0848,$0ae0,$0010,$0600,$01c0
  391.     dc.w 0,0
  392. Fotogramma6b:
  393.     dc.w $0000,$0080
  394.     dc.w $07c0,$0000,$1bf0,$0300,$35f8,$0700,$64fc,$0700
  395.     dc.w $43f8,$0784,$e3ec,$03be,$f3e4,$03fe,$efee,$1ffe
  396.     dc.w $eff0,$7fee,$f7f0,$3fce,$7fe0,$21dc,$5e00,$21fc
  397.     dc.w $08a0,$37f8,$00e0,$1ff0,$0000,$07c0
  398.     dc.w 0,0
  399.  
  400.  
  401.     SECTION    PLANEVUOTO,BSS_C    ; Il bitplane azzerato che usiamo,
  402.                     ; perche' per vedere gli sprite
  403.                     ; e' necessario che ci siano bitplanes
  404.                     ; abilitati
  405. BITPLANE:
  406.     ds.b    40*256        ; bitplane azzerato lowres
  407.  
  408.     end
  409.  
  410. In questo esempio mostriamo come realizzare uno sprite animato, seguendo la
  411. tecnica spiegata nella lezione.
  412. La figura che animiamo e` formata da una coppia di sprite "attached".
  413. In pratica quindi sono 2 gli sprite che animiamo.
  414. Per ciascun sprite abbiamo 6 fotogrammi. Consideriamo per ora solo il primo
  415. sprite. Ogni fotogramma e` memorizzato in una struttura sprite.
  416. Ogni volta che lo sprite viene ridisegnato, la routine "animazione" provvede
  417. ad utilizzare un diverso fotogramma, ovvero una diversa struttura sprite.
  418. La routine infatti gestisce una tabella con gli indirizzi delle varie
  419. strutture sprite, e ogni volta che viene eseguita sposta gli indirizzi
  420. all'interno della tabella in maniera che tutti, a rotazione vengano a trovarsi
  421. all'inizio della tabella.
  422. In pratica non c'e' nulla di nuovo, perche' siamo di fronte ad una tabella
  423. di indirizzi, anziche' una tabella di valori. Inoltre i 6 indirizzi vengono
  424. "ruotati" all'interno della tabella stessa, cioe' ogni fotogramma il primo
  425. indirizzo viene messo al posto dell'ultimo, il secondo al posto del primo, il
  426. terzo al posto del secondo e cosi' via, in modo analogo alla rotazione che
  427. abbiamo gia' visto per i colori in copperlist nella Lezione3e.s.
  428. L'indirizzo che si trova in testa alla tabella viene caricato nel puntatore
  429. dello sprite e usato come fotogramma per lo sprite.
  430. Per evitare di ripetere questo lavoro anche per il secondo sprite (quello
  431. dispari da attaccare al primo), ogni fotogramma di ogni "secondo sprite" e`
  432. sistemato in memoria subito dopo il corrispondente fotogramma del primo sprite,
  433. in modo tale che dall'indirizzo del fotogramma del primo sprite (pari) si puo`
  434. risalire all'indirizzo del corrispondente secondo sprite (dispari) da attaccare
  435. al primo semplicemente con un:
  436.  
  437.     lea     $44(a0),a1
  438.  
  439. Che aggiunge all'indirizzo del fotogramma del primo sprite la lunghezza del
  440. fotogramma stesso, ottenendo l'indirizzo del secondo fotogramma (dispari).
  441.  
  442.